package com.xxgc.demo.controller;

import com.xxgc.demo.controller.result.Result;
import com.xxgc.demo.controller.vo.QuartzTaskVO;
import com.xxgc.demo.utils.SchedulerUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.SchedulerException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/*
 *
 *   @Author:SJY
 *   @Date: 2023/9/27-09-27-16:07
 *   任务调度接口
 */
@Slf4j
@Tag(name = "任务调度")
@RestController
@RequestMapping("/quartz")
public class QuartzController {

    @Operation(summary = "添加任务",description = "任务")
    @PostMapping("/addTask")
    public Result addTask(@RequestBody @Valid QuartzTaskVO qtvo) throws SchedulerException, ClassNotFoundException {
        SchedulerUtil.create()
                .withTrigger(qtvo.getTriggerName(),qtvo.getTriggerGroup(),qtvo.getCron())
                .withJob(qtvo.getJobName(),qtvo.getJobGroup(), (Class<? extends Job>) Class.forName(qtvo.getJobClass()))
                .schedule();

        return Result.ok("添加任务成功");
    }

    /**
     * -------------------国庆大作业-----------------------
     * 1、创建一个表用来记录用户的会员信息（什么时候充的会员，什么时候到期）
     * 用户表加一个邮箱字段，加一个是否是会员的字段
     * 2、即将过期的7天，每天上午9点给用户发邮件让他续费
     * cron: 0 0 9 * * ?
     * 3、每天凌晨12点的时候，在会员信息表中过期的用户把会员状态改为非会员
     * cron: 0 0 0 * * ?
     * 4、写一个图片上传接口，图片大小控制在2M以内
     * 5、创建一个新闻表
     * 6、写一个添加新闻接口，要求有封面图，有标题，有文章等...
     *
     * 7、结合redis和Quartz，完成上传图片但没有上传新闻，做图片垃圾回收
     * 8、写24个Redis面试题和24个Quartz面试题
     * 9、接口添加任务的时候同步到数据库里
     * 10、第二次启动项目的时候把数据库没有过期的任务进行恢复
     *
     */



}
